package com.example.backend.service;

import com.example.backend.util.PageUtils;
import javafx.beans.binding.ObjectExpression;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * 单词本相关服务
 * @author 李月
 * @date 2022/5/2 9:55
 */
@Service
public interface BookletService {
    /**
     *创建单词本服务
     * @param userId 创建单词本的用户id
     * @param name 单词本名称
     * @param introduction 单词本简介
     * @return 创建是否成功，0为创建成功，1为名称不合法，2为简介不合法
     */
    public int createBooklet(int userId, String name, String introduction);

    /**
     *查看所有单词本服务
     * @param userId 拥有单词本的用户id
     * @param page 页码
     * @param pageSize 页面大小
     * @return PageUtils类型，页码、页面大小、总页面数量、单词本列表
     */
    public PageUtils getBooklets(int userId, int page, int pageSize);

    /**
     *查看单词本详情服务
     * @param bookletId 单词本id
     * @return 单词本详情，包含名称、作者、简介、条目数量、创建时间、已学习条目数量、未学习条目数量
     */
    public Map<String, Object> getBookletSpecification(int bookletId);

    /**
     * 分页查询单词本条目服务
     * @param bookletId 单词本id
     * @param page 页码
     * @param pageSize 页面大小
     * @return PageUtils类型，页码、页面大小、总页面数量、单词本条目列表
     */
    public PageUtils getEntries(int bookletId, int page, int pageSize);

    /**
     * 修改单词本详情服务
     * @param bookletId 单词本id
     * @param name 单词本名称
     * @param introduction 单词本简介
     * @return 修改是否成功
     */
    public boolean modifyBooklet(int bookletId, String name, String introduction);

    /**
     * 学习单词服务
     * @param bookletId 单词本id
     * @param list 单词学习状态
     * @return 学习状态记录是否成功
     */
    public boolean study(int bookletId, List<Map<String, Object>> list);

    /**
     * 删除单词本条目服务
     * @param bookletId 单词本id
     * @param entrylist 条目id列表
     * @return 删除是否成功
     */
    public boolean deleteEntry(int bookletId, List<Integer> entrylist);

    /**
     * 删除单词本服务
     * @param userId 用户id
     * @param bookletId 单词本id
     * @return 删除是否成功
     */
    public boolean deleteBooklet(int userId, int bookletId);

    /**
     * 增加单词本条目服务
     * @param bookletId 单词本id
     * @param wordId 单词id
     * @param remark 备注
     * @return 添加条目是否成功，0为添加成功，1为已添加，2为添加失败
     */
    public int addEntry(int bookletId, int wordId, String remark);

    /**
     * 根据单词本ID查询其中最远的20个单词服务
     * @param bookletId 单词本id
     * @return 单词条目详情，包括条目id、学习次数、单词拼写、音标、释义、备注
     */
    public List<Map<String, Object>> getTwentyWords(int bookletId);
}
